// import {  protocol, net } from 'electron'
// import path from 'path'
import { app, shell, BrowserWindow, Menu, Tray, ipcMain } from 'electron'
import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../../resources/icon.png?asset'
import yonghu from '../../resources/img/yonghux16.png?asset'
import bofang from '../../resources/img/bofangx16.png?asset'
import pause from '../../resources/img/pausex16.png?asset'
import next from '../../resources/img/nextx16.png?asset'
import moshi from '../../resources/img/moshix16.png?asset'
import shunxu1 from '../../resources/img/shunxu1x16.png?asset'
import suiji from '../../resources/img/suijix16.png?asset'
import neixunhuan from '../../resources/img/neixunhuanx16.png?asset'
import trayIcon from '../../resources/iconx16.png?asset'
import tuichu from '../../resources/img/tuichux16.png?asset'

/* protocol.registerSchemesAsPrivileged([
  {
    scheme: 'atom',
    privileges: {
      standard: true,
      secure: true,
      bypassCSP: true,
      allowServiceWorkers: true,
      supportFetchAPI: true,
      corsEnabled: true,
      stream: true,
    }
  }
]) */

// 系统托盘变量
let tray: null | Tray = null
let mainWindow: null | BrowserWindow = null

// 创建并控制浏览器窗口
function createWindow(): void {

  // 实例化
  mainWindow = new BrowserWindow({
    // 主窗口的宽度
    width: 1200,
    // 主窗口的长度
    height: 800,
    // 窗口的最小宽度
    minWidth: 850,
    // 窗口的最小高度
    minHeight: 600,
    // 窗口是否在创建时显示
    show: false,
    // 自动隐藏菜单栏
    // autoHideMenuBar: true,
    // 窗口标题栏样式-在 Windows上，当与 titleBarOverlay: true 合并时，它将激活窗口控件叠加(详情请参阅 titleBarOverlay)，否则将不会显示窗口控件。
    titleBarStyle: 'hidden',
    // 窗口图标
    ...(process.platform === 'linux' ? { icon } : { icon }),
    // 网页功能的设置
    webPreferences: {
      // 在页面运行其他脚本之前预先加载指定的脚本 无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径
      preload: join(__dirname, '../preload/index.js'),
      // 如果设置该参数, 沙箱的渲染器将与窗口关联, 使它与Chromium OS-level 的沙箱兼容, 并禁用 Node. js 引擎。
      sandbox: false,
      //========是否关闭安全策略==========
      webSecurity: false
    }
  })

  //当页面已经渲染完成(但是还没有显示) 并且窗口可以被显示时触发
  mainWindow.on('ready-to-show', () => {
    mainWindow?.show()
  })

  mainWindow.webContents.setWindowOpenHandler((details) => {
    // 以桌面的默认方式打开给定的文件
    shell.openExternal(details.url)
    return { action: 'deny' }
  })

  /* ***********************监听事件*********************** */
  // 缩小窗口
  ipcMain.on('narrowBrowserWindow', () => {
    mainWindow?.minimize()
  })
  // 隐藏窗口
  ipcMain.on('hiddenBrowserWindow', () => {
    mainWindow?.hide()
  })
  // 关闭窗口
  ipcMain.on('closeBrowserWindow', () => {
    mainWindow?.close()
  })
  // 改变播放模式
  ipcMain.on('changePlayMode', (_event, playmode) => {

    // 销毁原有的系统托盘
    tray?.destroy()

    // 添加图标和上下文菜单到系统通知区
    tray = new Tray(icon)
    const contextMenu = Menu.buildFromTemplate([
      {
        label: '个人中心', type: 'normal',
        icon: yonghu, click: () => {
          mainWindow?.show()
          mainWindow!.webContents.send('useConfig')
        }
      },
      {
        label: '开始播放', type: 'normal',
        icon: bofang, click: () => mainWindow!.webContents.send('playAudio')
      },
      {
        label: '暂停播放', type: 'normal',
        icon: pause, click: () => mainWindow!.webContents.send('pauseAudio')
      },
      {
        label: '下一曲', type: 'normal',
        icon: next, click: () => mainWindow!.webContents.send('playSkip')
      },
      {
        label: '播放模式', type: 'submenu',
        icon: moshi,
        submenu: [
          {
            label: "顺序播放",
            icon: shunxu1,
            type: 'radio',
            click: () => mainWindow!.webContents.send('olderPlay'),
            checked: playmode == 'older' ? true : false
          },
          {
            label: "随机播放",
            icon: suiji,
            type: 'radio',
            click: () => mainWindow!.webContents.send('randomPlay'),
            checked: playmode == 'random' ? true : false
          },
          {
            label: "单曲循环",
            icon: neixunhuan,
            type: 'radio',
            click: () => mainWindow!.webContents.send('loopPlay'),
            checked: playmode == 'loop' ? true : false
          },
          {
            label: "随心听🈲",
            icon: trayIcon,
            type: 'radio',
            click: () => mainWindow!.webContents.send('likePlay'),
            checked: playmode == 'like' ? true : false,
            enabled: false
          }
        ]
      },
      { label: '分割线', type: 'separator' },
      {
        label: '退出Listening', type: 'normal',
        icon: tuichu,
        click: (() => {
          mainWindow!.webContents.send('updateUserLevel')
          mainWindow?.close()
        })
      }
    ])
    tray.setContextMenu(contextMenu)
    // 设置鼠标指针在托盘图标上悬停时显示的文本
    tray.setToolTip('Listening-聆听！您听！')
    // 系统托盘事件
    tray.on('click', () => {
      mainWindow?.show()
    })

  })

  // HMR for renderer base on electron-vite cli.
  // Load the remote URL for development or the local html file for production.
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
  } else {
    mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
  }

}

//此方法将在Electron完成后调用，初始化，并准备创建浏览器窗口。某些API只能在此事件发生后使用。
app.whenReady().then(() => {

  /*   protocol.handle('atom', (request) => {
      const filePath = request.url.slice('atom://'.length + 1)
      const disk = "file:///" + request.url.slice('atom://'.length, 'atom://'.length + 1) + ":/"
      return net.fetch(path.join(disk, filePath))
    }) */

  //设置windows的应用程序用户模型id
  electronApp.setAppUserModelId('com.Listening')

  //开发中默认按F12打开或关闭DevTools，在生产中忽略CommandOrControl+R。
  //参见https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  // 添加图标和上下文菜单到系统通知区
  tray = new Tray(icon)
  const contextMenu = Menu.buildFromTemplate([
    {
      label: '个人中心', type: 'normal',
      icon: yonghu, click: () => {
        mainWindow?.show()
        mainWindow!.webContents.send('useConfig')
      }
    },
    {
      label: '开始播放', type: 'normal',
      icon: bofang, click: () => mainWindow!.webContents.send('playAudio')
    },
    {
      label: '暂停播放', type: 'normal',
      icon: pause, click: () => mainWindow!.webContents.send('pauseAudio')
    },
    {
      label: '下一曲', type: 'normal',
      icon: next, click: () => mainWindow!.webContents.send('playSkip')
    },
    {
      label: '播放模式', type: 'submenu',
      icon: moshi,
      submenu: [
        {
          label: "顺序播放",
          icon: shunxu1,
          type: 'radio',
          click: () => mainWindow!.webContents.send('olderPlay'),
        },
        {
          label: "随机播放",
          icon: suiji,
          type: 'radio',
          click: () => mainWindow!.webContents.send('randomPlay'),
        },
        {
          label: "单曲循环",
          icon: neixunhuan,
          type: 'radio',
          click: () => mainWindow!.webContents.send('loopPlay'),
        },
        {
          label: "随心听🈲",
          icon: trayIcon,
          type: 'radio',
          click: () => mainWindow!.webContents.send('likePlay'),
          enabled: false
        }
      ]
    },
    { label: '分割线', type: 'separator' },
    {
      label: '退出Listening', type: 'normal',
      icon: tuichu,
      click: (() => {
        mainWindow!.webContents.send('updateUserLevel')
        mainWindow?.close()
      })
    }
  ])
  tray.setContextMenu(contextMenu)
  // 设置鼠标指针在托盘图标上悬停时显示的文本
  tray.setToolTip('Listening-聆听！您听！')
  // 系统托盘左键点击事件
  tray.on('click', () => {
    mainWindow?.show()
  })

  // 创建并控制浏览器窗口
  createWindow()

  app.on('activate', function () {
    //在macOS上，当dock图标被单击，并且没有其他窗口打开。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })


})

//关闭所有窗口后退出，macOS除外。在那里，这很常见使应用程序及其菜单栏保持活动状态，直到用户退出，显式使用Cmd+Q。
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

